﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.SqlClient;
using nmProductos;
using nmConnectionDatabase;
using System.IO;
using nmFile;


namespace DarkPassenger
{
    public partial class MenuProductos : Form
    {
        //Se crea el Objeto CONEXIONDB. Se realiza la Conexion y se pasa la Ruta como parametro
        ConexionDB Conexion = new ConexionDB("Data Source=localhost;Initial Catalog=TPVideoJuegos;Integrated Security=True");

        private MenuProductos_BusquedaAvanzada frm2;
        int RowGrid;
        int ColumnGrid;
        int PestañaSeleccionada = 0;

        public MenuProductos()
        {
            InitializeComponent();
        }


        // ****************************************************************************************************
        // ****************************************************************************************************
        // ****************************************************************************************************
        // ********************************** BOTONES Y MENUES ********************************************
        // ****************************************************************************************************
        // ****************************************************************************************************
        // ****************************************************************************************************

        private void CargarGridDefault()
        {
            string Consulta = "Select * from Productos";
            //string Consulta = "Select Productos.TipoProducto, ProductosXConsola.IDConsola, Productos.IDProducto, Productos.Nombre, Consolas.Nombre as Consola, Stock, Precio, Descripcion, Productos.Fabricante, Genero, Clasificacion, Portada, FechaSalida FROM Productos INNER JOIN ProductosXConsola on Productos.TipoProducto = ProductosXConsola.TipoProducto AND Productos.IDProducto = ProductosXConsola.IDProducto INNER JOIN Consolas on ProductosXConsola.IDConsola = Consolas.IDConsola ";
            //Se carga el DataSet de la Conexion pasandole la Query y el NombreTabla
            Conexion.CargarDataSet(Consulta, "Productos");
            grdProductos.DataSource = Conexion.GetDataSet().Tables[0];
            grdProductos.Columns["Portada"].ReadOnly = true;
            Conexion.Close();
        }

        private void CargarGrid(string Consulta)
        {
            Conexion.CargarDataSet(Consulta, "Productos");

            if(PestañaSeleccionada == 0 ) {
            grdProductos.DataSource = Conexion.GetDataSet().Tables[0];
            }

            if (PestañaSeleccionada == 1)
            {
                grdProductosxConsola.DataSource = Conexion.GetDataSet().Tables[0];
            }

            if (PestañaSeleccionada == 2)
                grdConsolas.DataSource = Conexion.GetDataSet().Tables[0];

            if (PestañaSeleccionada == 3)
                grdTipoProductos.DataSource = Conexion.GetDataSet().Tables[0];

            Conexion.Close();
        }

        private void CargarGridTabPageProductosXConsola()
        {
            string Consulta = "Select Productos.TipoProducto, ProductosXConsola.IDConsola, Productos.IDProducto, Productos.Nombre, Consolas.Nombre as Consola, Stock, Precio, Descripcion, Productos.Fabricante, Genero, Clasificacion, Portada, FechaSalida, ProductosxConsola.Activo FROM Productos INNER JOIN ProductosXConsola on Productos.TipoProducto = ProductosXConsola.TipoProducto AND Productos.IDProducto = ProductosXConsola.IDProducto INNER JOIN Consolas on ProductosXConsola.IDConsola = Consolas.IDConsola ";
            //Se carga el DataSet de la Conexion pasandole la Query y el NombreTabla
            Conexion.CargarDataSet(Consulta, "Productos");
            grdProductosxConsola.DataSource = Conexion.GetDataSet().Tables[0];
            Conexion.Close();
        }



        private void MenuProductos_Load(object sender, EventArgs e)
        {
            CargarGridDefault();

            Autocomplete.SetAutcomplete(ref txtBuscador, ref Conexion, "Nombre");
        }

        private void btnEliminar_Click(object sender, EventArgs e)
        {

            if(PestañaSeleccionada == 0) {
            Form EliminarProducto = new MenuProductos_EliminarProducto(Conexion);
            EliminarProducto.ShowDialog();
            CargarGridDefault();
            }

            if (PestañaSeleccionada == 1)
            {
                MessageBox.Show("No se puede utilizar este Boton con la Pestaña 'Consolas' seleccionada");
            }
        }

        private void btnActualizar_Click(object sender, EventArgs e)
        {

            if (PestañaSeleccionada == 0)
            {
                Productos Prod = new Productos();
                Prod.AltaProductos(Conexion.GetDataSet(), Conexion.GetRutaConexion());
                Prod.BajaProductos(Conexion.GetDataSet(), Conexion.GetRutaConexion());
                Prod.ModificarProducto(Conexion.GetDataSet(), Conexion.GetRutaConexion());
                CargarGridDefault();
            }

            if (PestañaSeleccionada == 1)
            {
                MessageBox.Show("No se puede utilizar este Boton con la Pestaña 'Consolas' seleccionada");
            }
        }
        


        private void btnNuevo_Click(object sender, EventArgs e)
        {

            if (PestañaSeleccionada == 0)
            {
                Form NuevoProducto = new MenuProductos_NuevoProducto(Conexion);
                NuevoProducto.ShowDialog();
                CargarGridDefault();
            }

            if (PestañaSeleccionada == 1)
            {
                MessageBox.Show("No se puede utilizar este Boton con la Pestaña 'Consolas' seleccionada");
            }
        }

        private void MenuProductos_FormClosed(object sender, FormClosedEventArgs e)
        {
            this.Close();
            this.Dispose();
        }

        private void btnBuscador_Click(object sender, EventArgs e)
        {

            if (txtBuscador.Text.Trim() != "")
            {
                if (PestañaSeleccionada == 0)
                    CargarGrid("Select * from Productos where Productos.Nombre LIKE " + "'%" + ArreglarConsulta() + "%'");

                if (PestañaSeleccionada == 1)
                    CargarGrid("Select Productos.TipoProducto, ProductosXConsola.IDConsola, Productos.IDProducto, Productos.Nombre, Consolas.Nombre as Consola, Stock, Precio, Descripcion, Productos.Fabricante, Genero, Clasificacion, Portada, FechaSalida FROM Productos INNER JOIN ProductosXConsola on Productos.TipoProducto = ProductosXConsola.TipoProducto AND Productos.IDProducto = ProductosXConsola.IDProducto INNER JOIN Consolas on ProductosXConsola.IDConsola = Consolas.IDConsola where Productos.Nombre LIKE " + "'%" + ArreglarConsulta() + "%'");
            }
        }

        private void btnReiniciar_Click(object sender, EventArgs e)
        {

            if(PestañaSeleccionada == 0)
            CargarGridDefault();

            if (PestañaSeleccionada == 1)
                CargarGridTabPageProductosXConsola();
        }



        private void btnBusquedaAvanzada_Click(object sender, EventArgs e)
        {
            string Consulta = "";
            frm2 = new MenuProductos_BusquedaAvanzada(Conexion);
            frm2.ShowDialog();
            Consulta = frm2.ReturnConsulta();

            if (Consulta != "")
            {
                if(PestañaSeleccionada == 0) {
                Consulta = "Select * from Productos where " + Consulta;
                CargarGrid(Consulta);
                }

                if(PestañaSeleccionada == 1 )
                {
                    Consulta = "Select Productos.TipoProducto, ProductosXConsola.IDConsola, Productos.IDProducto, Productos.Nombre, Consolas.Nombre as Consola, Stock, Precio, Descripcion, Productos.Fabricante, Genero, Clasificacion, Portada, FechaSalida FROM Productos INNER JOIN ProductosXConsola on Productos.TipoProducto = ProductosXConsola.TipoProducto AND Productos.IDProducto = ProductosXConsola.IDProducto INNER JOIN Consolas on ProductosXConsola.IDConsola = Consolas.IDConsola where " + Consulta;
                    CargarGrid(Consulta);
                }

            }


            }


        private void grdProductos_RowHeaderMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {

            //DataGridViewSelectedCellCollection cell = grdProductos.SelectedCells;
            //MessageBox.Show(cell[6].Value.ToString());
            //MessageBox.Show(grdProductos[columnindex,rowindex].Value.ToString());

            MenuProductos_ProductoSeleccionado form = new MenuProductos_ProductoSeleccionado(grdProductos.SelectedCells);
            form.ShowDialog();
        }

        private void tabControl1_Selected(object sender, TabControlEventArgs e)
        {
            PestañaSeleccionada = e.TabPageIndex;

            if (PestañaSeleccionada == 0)
            {
                CargarGridDefault();
            }

            if (PestañaSeleccionada == 1)
            {
                CargarGridTabPageProductosXConsola();
            }

            if (PestañaSeleccionada == 2)
            {
                string Consulta = "Select * from Consolas";
                CargarGrid(Consulta);
            }

            if (PestañaSeleccionada == 3)
            {
                string Consulta = "Select * from TipoProducto";
                CargarGrid(Consulta);
            }



        }

        private void grdProductos_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
        {
            if (e.ColumnIndex.ToString() == "7" && grdProductos[e.ColumnIndex, e.RowIndex].Value.ToString().Trim() != "")
            {
                MenuProductos_ImagenSeleccionada frm = new MenuProductos_ImagenSeleccionada(grdProductos[e.ColumnIndex, e.RowIndex].Value.ToString());
                frm.ShowDialog();
            }
        }


        private void grdProductos_CellMouseClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            if (e.ColumnIndex == 7 && e.RowIndex > -1 && e.Button == MouseButtons.Right)
            {
                ContextMenuStrip cm = new ContextMenuStrip();
                cm.Items.Add("Agregar Nuevo");
                cm.Items.Add("Agregar Existente");
                cm.Items.Add("Borrar Link");

                ColumnGrid = e.ColumnIndex;
                RowGrid = e.RowIndex;

                cm.ItemClicked += new ToolStripItemClickedEventHandler(cm_ItemClicked);


                //cm.MenuItems.Add("Abrir" );
                //cm.MenuItems.Add("Agregar");

                var Posicion_Puntero = grdProductos.PointToClient(Cursor.Position);

                cm.Show(grdProductos, Posicion_Puntero);
            }
        }




        public void cm_ItemClicked(object sender, ToolStripItemClickedEventArgs e)
        {
            ToolStripItem item = e.ClickedItem;
            myFile objFile = new myFile();


            if (item.ToString() == "Agregar Nuevo")
            {
                objFile.AgregarImagen(ref grdProductos,ColumnGrid,RowGrid);   
            }


            if (item.ToString() == "Borrar Link")
            {
                objFile.BorrarImagen(ref grdProductos, ColumnGrid, RowGrid);
            }

            if (item.ToString() == "Agregar Existente")
            {
                objFile.AgregarExistente(ref grdProductos, ColumnGrid, RowGrid);
            }




        }

        private void btnModificar_Click(object sender, EventArgs e)
        {

            if (PestañaSeleccionada == 0)
            {
                DataGridViewRow Prodseleccionado = grdProductos.CurrentRow;
                MenuProductos_ModificarProducto form = new MenuProductos_ModificarProducto(Conexion, Prodseleccionado);
                form.ShowDialog();
                CargarGridDefault();
            }

            else
            {
                MessageBox.Show("No se puede Modificar esta Tabla", "Error");
            }
            



        }

        private void grdProductosxConsola_RowHeaderMouseDoubleClick(object sender, DataGridViewCellMouseEventArgs e)
        {
            MenuProductos_ProductoConsolaSeleccionado form = new MenuProductos_ProductoConsolaSeleccionado(grdProductosxConsola.SelectedCells);
            form.ShowDialog();
        }

        private String ArreglarConsulta()
        {
            String consultaArreglada = new String('\0', 0);

            foreach (Char c in txtBuscador.Text)
            {
                if (!Char.IsLetterOrDigit(c) && c != ' ')
                {
                    consultaArreglada += '_';
                }
                else
                {
                    consultaArreglada += c;
                }
            }
            
            //MessageBox.Show(consultaArreglada);
            return consultaArreglada;
        }























        



}
}

